package com.winner.data.constant;

import java.util.Arrays;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 枚举类这2个注解都是必须的 @AllArgsConstructor @Getter 在其他类里用需要ActionEnum.ADD.getCode()才可以
 *
 * 枚举被设计成是单例模式
 * jvm为了保证每一个枚举类元素的唯一实例，是不会允许外部进行new的,所以会把构造函数设计成private,  ADD(0, "新增")就是构造函数,防止用户生成实例，破坏唯一性
 *
 * @author wangxinle5
 * @since 2021-07-19
 */
@AllArgsConstructor
@Getter
public enum ActionEnum {

    /**
     * 新增
     */
    ADD(0, "新增"),

    /**
     * 更新
     */
    UPDATE(1, "更新"),

    /**
     * 删除
     */
    DELETE(2, "删除"),
    ;

    private Integer code;

    private String desc;

    /**
     * 通过code获取desc
     *
     * @param code code
     * @return desc
     */
    public static String getDescByCode(Integer code) {
        // Arrays.stream(values()) 将枚举数组转为数组流操作
        return Arrays.stream(values()).filter(it -> it.code.equals(code)).findFirst().map(a -> a.desc).orElse(null);
    }

    /**
     * 通过desc获取code
     *
     * @param desc desc
     * @return code
     */
    public static Integer getCodeByDesc(String desc) {
        return Arrays.stream(values()).filter(it -> it.desc.equals(desc)).findFirst().map(a -> a.code).orElse(null);
    }


    public static void main(String[] args) {
        String desc = getDescByCode(0);
        System.out.println(desc);

        Integer code = getCodeByDesc("新增");
        System.out.println(code);
    }

}
